//! 通过`#[scheduled]`属性宏生成定时任务
//!
//! `#[scheduled]`有两个属性
//! + cron：指定表达式， 如：cron = "*/1 * * * * *"
//! + rate：指定时间频率，单位：秒
//!
//! > 注意: cron和rate两者必须且只能有一个有值
//!
//! `#[scheduled]`必须添加在一个无参数、无返回值的异步函数上
//! 然后需要执行一下该函数，定时任务才能生效
//!
//! # Example
//! ```
//! #[scheduled(cron = "*/1 * * * * *")]
//! async fn func1() {
//!     println!("func1");
//! }
//!
//! #[tokio::main]
//! async fn main() {
//!     run_cron_task!(func1);
//!     // 或
//!     // func1().await;
//! }
//! ```

/// 运行添加了#[scheduled]属性的方法
///
/// #Example
/// ```
/// #[scheduled(cron = "*/1 * * * * *")]
/// async fn func1() {
///     println!("func1");
/// }
///
/// #[tokio::main]
/// async fn main() {
///     run_cron_task!(func1);
/// }
/// ```
#[macro_export]
macro_rules! run_cron_task {
    ($($var:ident),+ $(,)?) => {
        $($var().await;)+
    };
}

pub type Job = tokio_cron_scheduler::Job;
pub type JobScheduler = tokio_cron_scheduler::JobScheduler;
pub use scheduled_task_macro::*;